(Interface Segregation Principle)
El Principio de Segregación de Interfaces, parte fundamental de SOLID, sostiene que “los clientes no deben verse forzados a depender de interfaces que no utilizan”.
En otras palabras: es mejor tener varias interfaces específicas que una sola interfaz general y pesada. Cada interfaz debería ser lo más pequeña y enfocada posible, adaptada a las necesidades reales de los clientes.
| Ventaja | Impacto |
|---|---|
| Simplicidad | Los clientes interactúan solo con los métodos que realmente necesitan. |
| Flexibilidad | Permite cambios o ampliaciones en partes específicas del sistema sin afectar a otros módulos. |
| Menor acoplamiento | Reduce dependencias innecesarias entre clases no relacionadas. |
| Fácil mantenimiento | Cuando una interfaz cambia, afecta solo a quienes realmente la usan. |
Una interfaz demasiado grande:
public interface Worker {
void work();
void eat();
}
Clases que implementan:
public class OfficeWorker implements Worker {
public void work() { /* trabaja en oficina */ }
public void eat() { /* almuerza */ }
}
public class RobotWorker implements Worker {
public void work() { /* trabaja 24/7 */ }
public void eat() {
throw new UnsupportedOperationException("Robots don't eat.");
}
}
RobotWorker se ve forzado a implementar un método eat() que no tiene sentido para su naturaleza. Esto es una violación del ISP.
Dividimos en interfaces más específicas:
public interface Workable {
void work();
}
public interface Eatable {
void eat();
}
Ahora:
public class OfficeWorker implements Workable, Eatable {
public void work() { /* trabaja en oficina */ }
public void eat() { /* almuerza */ }
}
public class RobotWorker implements Workable {
public void work() { /* trabaja 24/7 */ }
}
Cada clase implementa solo las interfaces que realmente necesita.
RobotWorker ya no está obligado a implementar un método inútil.
El Principio de Segregación de Interfaces impulsa un diseño de software más limpio, modular y fácil de mantener.
Aplicarlo correctamente significa que cada módulo depende solo de lo que realmente usa, evitando dependencias innecesarias y mejorando la evolución del sistema.